using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.ApplicationBlocks.Data;
using Common;
using DataAccess;
using SystemFrameworks;

namespace BusinessRules
{
	/// <summary>
	/// Clase de acceso a datos para la entidad Mod_preguntas_encuestas
	/// </summary>
	public class EncuestaPregunta : SINIC
	{
		#region Private Data Access Atributes

		private const String ENC_ID_PARAM = "@ENC_ID";
		private const String PRE_ID_PARAM = "@PRE_ID";
		private const String RES_ID_PARAM = "@RES_ID";
		private const String PRE_PREGUNTAS_ENCUESTAS_PARAM = "@PRE_PREGUNTAS_ENCUESTAS";
		private const String COUNTER_PARAM = "@COUNTER";

		#endregion Private Data Access Atributes

		/// <summary>
		/// Constructor de la clase Mod_preguntas_encuestas
		/// </summary>
		
         public EncuestaPregunta(string strCadenaConecxion)
        {
            CadenaConexion = strCadenaConecxion;
        }

        private string _CadenaConexion;

        public string CadenaConexion
        {
            get { return _CadenaConexion; }
            set { _CadenaConexion = value; }
        }

//		public EncuestaPreguntaData BuscarEncuestasPreguntas()
//		{
//			EncuestaPreguntaData response = new EncuestaPreguntaData();
//			SqlHelper.ExecuteDataset(this.ConnectionString, CommandType.StoredProcedure, "PAS_BUSCAR_MOD_PREGUNTAS_ENCUESTAS", response);
//			if (response.Rows.Count == 0)
//				return null;
//			return response;
//		}
//
		/// <summary>
		/// consulta todas las encuestas preguntas de MOD_PREGUNTAS_ENCUESTAS por id de encuesta
		/// </summary>
		/// <param name="Id"></param>
		/// <returns></returns>
		public EncuestaPreguntaData ConsultarEncuestasPreguntas(string Id)
		{
			EncuestaPreguntaData response = new EncuestaPreguntaData();
			SqlParameter param1 = new SqlParameter(ENC_ID_PARAM, Id);
			SqlParameter[] parameters = {param1};
            SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_MOD_PREGUNTAS_ENCUESTAS", response, parameters);
//			if (response.Rows.Count == 0)
//				return null;
			return response;
		}

		public EncuestaPreguntaData ConsultarEncuestasPreguntasPublico(string Id)
		{
			EncuestaPreguntaData response = new EncuestaPreguntaData();
			SqlParameter param1 = new SqlParameter(ENC_ID_PARAM, Id);
			SqlParameter[] parameters = {param1};
            SqlHelper.ExecuteDataTable(CadenaConexion, CommandType.StoredProcedure, "PAS_CONSULTAR_MOD_PREGUNTAS_ENCUESTAS_PUBLICO", response, parameters);
			if (response.Rows.Count == 0)
				return null;
			return response;
		}

//		public EncuestaPreguntaData ConsultarEncuestasPreguntasUno(string Id)
//		{
//			EncuestaPreguntaData response = new EncuestaPreguntaData();
//			SqlParameter param1 = new SqlParameter(ENC_ID_PARAM, Id);
//			SqlParameter[] parameters = {param1};
//			SqlHelper.ExecuteDataset(this.ConnectionString, CommandType.StoredProcedure, "PAS_CONSULTAR_MOD_PREGUNTAS_ENCUESTAS_UNO", response, parameters);
//			if (response.Rows.Count == 0)
//				return null;
//			return response;
//		}
//
//		public EncuestaPreguntaData ConsultarEncuestasPreguntasRespuestas(string IdRes)
//		{
//			EncuestaPreguntaData response = new EncuestaPreguntaData();
//			SqlParameter param1 = new SqlParameter(RES_ID_PARAM, IdRes);
//			SqlParameter[] parameters = {param1};
//			SqlHelper.ExecuteDataset(this.ConnectionString, CommandType.StoredProcedure, "PAS_CONSULTAR_MOD_PREGUNTAS_ENCUESTAS_RESPUESTA", response, parameters);
//			if (response.Rows.Count == 0)
//				return null;
//			return response;
//		}
 
		public decimal ConsultarNumeroPreguntas(decimal EncId)
		{
			decimal objReturn;
			try
			{
				SqlParameter param1 = new SqlParameter(COUNTER_PARAM, SqlDbType.Decimal);
				param1.Direction = ParameterDirection.Output;
				SqlParameter param2 = new SqlParameter(ENC_ID_PARAM, EncId);
				SqlParameter[] parameters = {param1, param2};
				SqlHelper.ExecuteNonQuery(this.ConnectionString, CommandType.StoredProcedure, "PAS_CUENTA_PREGUNTAS_ENCUESTA", parameters);
				objReturn = decimal.Parse(param1.Value.ToString());
				if (objReturn == 0)
					return 0;
				else
					return objReturn;

			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorConsultar", "Total Puntaje del Proyectos"), ex);
			}

		}


		public decimal AdicionarEncuestasPreguntas(EncuestaPreguntaData datos ) //, SqlTransaction objTrans)
		{
			decimal intPre_Id = 0;
			DataTable tabla = datos; 

			try
			{
				foreach (DataRow row in tabla.Rows)
				{
					SqlParameter param1 = new SqlParameter(PRE_ID_PARAM, SqlDbType.Decimal);
					param1.Direction = ParameterDirection.Output;
					SqlParameter param2 = new SqlParameter(ENC_ID_PARAM, row[EncuestaPreguntaData.ENC_ID_FIELD]);
					SqlParameter param3 = new SqlParameter(RES_ID_PARAM, row[EncuestaPreguntaData.RES_ID_FIELD]);
					SqlParameter param4 = new SqlParameter(PRE_PREGUNTAS_ENCUESTAS_PARAM, row[EncuestaPreguntaData.PRE_PREGUNTAS_ENCUESTAS_FIELD]);
					SqlParameter[] parameters = {param1, param2, param3, param4};
					SqlHelper.ExecuteNonQuery( this.ConnectionString  , CommandType.StoredProcedure, "PAS_ADICIONAR_MOD_PREGUNTAS_ENCUESTAS", parameters);
					intPre_Id = decimal.Parse(param1.Value.ToString());
				}
				
			}
			catch (SqlException sqlEx)
			{				
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "Entidades"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", "Entidades"), ex);
			}
			
			return (intPre_Id);
		}
//
//		public decimal AdicionarEncuestasPreguntas(string strENC_ID, string strRES_ID, string strPRE_PREGUNTAS_ENCUESTAS)
//		{
//			decimal intPre_Id = 0;
//			try
//			{
//				SqlParameter param1 = new SqlParameter(PRE_ID_PARAM, SqlDbType.Decimal);
//				param1.Direction = ParameterDirection.Output;
//				SqlParameter param2 = new SqlParameter(ENC_ID_PARAM, strENC_ID);
//				SqlParameter param3 = new SqlParameter(RES_ID_PARAM, strRES_ID);
//				SqlParameter param4 = new SqlParameter(PRE_PREGUNTAS_ENCUESTAS_PARAM, strPRE_PREGUNTAS_ENCUESTAS);
//				SqlParameter[] parameters = {param1, param2, param3, param4};
//				SqlHelper.ExecuteNonQuery(this.ConnectionString, CommandType.StoredProcedure, "PAS_ADICIONAR_MOD_PREGUNTAS_ENCUESTAS", parameters);
//				intPre_Id = decimal.Parse(param1.Value.ToString());
//			}
//			catch (SqlException sqlEx)
//			{
//				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ADICIONAR_MOD_PREGUNTAS_ENCUESTAS"), sqlEx);
//			}
//			catch (Exception ex)
//			{
//				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", "PAS_ADICIONAR_MOD_PREGUNTAS_ENCUESTAS"), ex);
//			}
//			return (intPre_Id);
//		}
//
//		public void ActualizarEncuestasPreguntas(EncuestaPreguntaData datos)
//		{
//			DataTable tabla = datos;
//			try
//			{
//				foreach (DataRow row in tabla.Rows)
//				{
//					SqlParameter param1 = new SqlParameter(ENC_ID_PARAM, row[EncuestaPreguntaData.ENC_ID_FIELD]);
//					SqlParameter param2 = new SqlParameter(PRE_ID_PARAM, row[EncuestaPreguntaData.PRE_ID_FIELD]);
//					SqlParameter param3 = new SqlParameter(RES_ID_PARAM, row[EncuestaPreguntaData.RES_ID_FIELD]);
//					SqlParameter param4 = new SqlParameter(PRE_PREGUNTAS_ENCUESTAS_PARAM, row[EncuestaPreguntaData.PRE_PREGUNTAS_ENCUESTAS_FIELD]);
//					SqlParameter[] parameters = {param1, param2, param3, param4};
//					SqlHelper.ExecuteNonQuery(this.ConnectionString, CommandType.StoredProcedure, "PAS_ACTUALIZAR_MOD_PREGUNTAS_ENCUESTAS", parameters);
//				}
//			}
//			catch (Exception ex)
//			{
//				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorActualizar", "PreguntasEncuestas"), ex);
//			}
//		}
//
//		/// <summary>
//		/// Elimina un registro de la entidad
//		/// </summary>
//		/// <param name="Id">Identificador del registro</param>
//		public void EliminarEncuestasPreguntas(string Id)
//		{
//			try
//			{
//				SqlParameter param1 = new SqlParameter(PRE_ID_PARAM, Id);
//				SqlParameter[] parameters = {param1};
//				SqlHelper.ExecuteNonQuery(this.ConnectionString, CommandType.StoredProcedure, "PAS_ELIMINAR_MOD_PREGUNTAS_ENCUESTAS", parameters);
//			}
//			catch (Exception ex)
//			{
//				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorEliminar", "PreguntasEncuestas"), ex);
//			}
//		}
//
		public void EliminarEncuestasPreguntasIDENC(string IdEnc   )
		{
			try
			{
				SqlParameter param1 = new SqlParameter(ENC_ID_PARAM, IdEnc);
				SqlParameter[] parameters = {param1};
				SqlHelper.ExecuteNonQuery( this.ConnectionString, CommandType.StoredProcedure, "PAS_ELIMINAR_MOD_PREGUNTAS_ENCUESTAS_IDENC", parameters);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorEliminar", "PreguntasEncuestas"), ex);
			}
		}
//
//		public void EliminarEncuestasPreguntas(ArrayList arrIDs)
//		{
//			SqlConnection objConnection = new SqlConnection(ConnectionString);
//			objConnection.Open();
//			SqlTransaction objTrans = objConnection.BeginTransaction();
//
//			try
//			{
//				foreach (object Item in arrIDs)
//				{
//					SqlParameter param1 = new SqlParameter(ENC_ID_PARAM, decimal.Parse(Item.ToString()));
//					SqlParameter[] parameters = {param1};
//					SqlHelper.ExecuteNonQuery(objTrans, CommandType.StoredProcedure, "PAS_ELIMINAR_MOD_PREGUNTAS_ENCUESTAS_IDENC", parameters);
//				}
//				objTrans.Commit();
//			}
//			catch (SqlException sqlEx)
//			{
//				objTrans.Rollback();
//				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PreguntasEncuestas"), sqlEx);
//			}
//			catch
//			{
//				objTrans.Rollback();
//				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorEliminar", "PreguntasEncuestas"));
//			}
//			finally
//			{
//				objConnection.Close();
//			}
//		}


		#region metodos nuevos
		public bool ActualizarEncuestaPregunta(EncuestaPreguntaData datos ) //, SqlTransaction objTrans)
		{
			bool intPre_Id = false;
			DataTable tabla = datos; 

			try
			{
				foreach (DataRow row in tabla.Rows)
				{
					SqlParameter param1 = new SqlParameter(ENC_ID_PARAM, row[EncuestaPreguntaData.ENC_ID_FIELD]);
					SqlParameter param2 = new SqlParameter(PRE_ID_PARAM, row[EncuestaPreguntaData.PRE_ID_FIELD]);
					SqlParameter param3 = new SqlParameter(RES_ID_PARAM, row[EncuestaPreguntaData.RES_ID_FIELD]);
					SqlParameter param4 = new SqlParameter(PRE_PREGUNTAS_ENCUESTAS_PARAM, row[EncuestaPreguntaData.PRE_PREGUNTAS_ENCUESTAS_FIELD]);
					SqlParameter[] parameters = {param1, param2, param3, param4};
					SqlHelper.ExecuteNonQuery(this.ConnectionString, CommandType.StoredProcedure, "PAS_ACTUALIZAR_MOD_PREGUNTAS_ENCUESTAS", parameters);
				
				}
				intPre_Id = true;
			}
			catch (SqlException sqlEx)
			{				
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "Entidades"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", "Entidades"), ex);
			}
			
			return intPre_Id ;
		}

		public bool EliminarEncuestaPregunta(EncuestaPreguntaData datos ) //, SqlTransaction objTrans)
		{
			bool intPre_Id = false;
			DataTable tabla = datos; 

			try
			{
				foreach (DataRow row in tabla.Rows)
				{
					SqlParameter param1 = new SqlParameter(PRE_ID_PARAM, row[EncuestaPreguntaData.PRE_ID_FIELD]);
					SqlParameter[] parameters = {param1};
					SqlHelper.ExecuteNonQuery(this.ConnectionString, CommandType.StoredProcedure, "PAS_ELIMINAR_MOD_PREGUNTAS_ENCUESTAS", parameters);

				}
				intPre_Id = true;
			}
			catch (SqlException sqlEx)
			{				
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "Entidades"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", "Entidades"), ex);
			}
			
			return intPre_Id ;
		}
		public bool EjecutarCambios(EncuestaPreguntaData datos  )
		{
			bool response = false;
		
			EncuestaPreguntaData dataAdicionar = new EncuestaPreguntaData();
			EncuestaPreguntaData dataEliminar = new EncuestaPreguntaData();
			EncuestaPreguntaData dataActualizar = new EncuestaPreguntaData();

			if (datos != null && datos.Rows.Count > 0)
			{
				foreach (DataRow row in datos.Rows)
				{
					switch (row.RowState)
					{
						case DataRowState.Added:
							dataAdicionar.ImportRow(row);
							break;
						case DataRowState.Modified:
							dataActualizar.ImportRow(row);
							break;
						case DataRowState.Deleted:
							DataRow dataRow = dataEliminar.NewRow();
							dataRow[EncuestaPreguntaData.PRE_ID_FIELD] = row[EncuestaPreguntaData.PRE_ID_FIELD, DataRowVersion.Original];
							
							dataEliminar.addEncuestaPregunta(dataRow);
							break;
					}
				}
			}

			try
			{
				if (dataAdicionar != null && dataAdicionar.Rows.Count > 0)
				{				
					 AdicionarEncuestasPreguntas(dataAdicionar );
					response =true;
				}
				if (dataActualizar != null && dataActualizar.Rows.Count > 0)
				{				
					response = ActualizarEncuestaPregunta(dataActualizar );
				}
				if (dataEliminar != null && dataEliminar.Rows.Count > 0)
				{					
					response = EliminarEncuestaPregunta(dataEliminar );
				}	
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgCambiosNoExitoso", GetType().FullName), ex);
			}			
			
			return response;
		}		

		#endregion
		

	}
}